home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / CMARS.ZIP / CMARS.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-31  |  4.0 KB  |  194 lines

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <dos.h>
  4. #include <stdlib.h>
  5. #include <fcntl.h>        /* added for the MAP Save stuff */
  6. #include <io.h>            /* added for the MAP Save stuff */
  7. #include <sys\stat.h>        /* added for the MAP Save stuff */
  8.  
  9. #include "cmars.h"
  10.  
  11. /* Generic routine to update the view */
  12. void UpdateView(void)
  13. {
  14. /* you might want to modify this so you can set your own view coord */
  15.     UpdateViewCoord();    
  16. /* These draw the sky and the mountains... */
  17.     UpdateSky();
  18.     UpdateMountains();
  19. }
  20. /* Routine to set the palette.  I've the assembly language version
  21.  * intact, the two should have identical results
  22.  */
  23. void MakePalette(PALETTE palette[])
  24. {
  25.   int i;
  26.     /* Mountains, grey shading */
  27.   for (i=0; i < 64; i++) {
  28.         palette[i].red = i;
  29.         palette[i].green = i;
  30.         palette[i].blue = i;
  31.     }
  32.     /* Sky, blue shading.  Can only send values up to 63 to palette regs */
  33.   for (i=64; i < 128; i++) {        /* clouds from 74-84 */
  34.         palette[i].red = 0;
  35.         palette[i].green = 0;
  36.         palette[i].blue = i&63;
  37.     }
  38.     /* Midband, green shading */
  39.   for (i=128; i < 192; i++) {
  40.         palette[i].red = 0;
  41.         palette[i].green = i&63;
  42.         palette[i].blue = 0;
  43.     }
  44.     /* Unused */
  45.   for (i=192; i < 256; i++) {
  46.         palette[i].red = 0;
  47.         palette[i].green = 0;
  48.         palette[i].blue = 0;
  49.     }
  50.     PaletteOut(palette);
  51. }
  52.  
  53. int NormalizedAngle(int angle)
  54. {
  55.     if (angle > 359)
  56.         return(angle-360);
  57.     if (angle < 0)
  58.         return(angle+360);
  59.     return(angle);
  60. }
  61. /*****************************************************************************/
  62. int main(int argc, char *argv[])
  63. {
  64. int fh;
  65. int keys=0;
  66. unsigned int basemem;
  67. unsigned char far * marsmap;
  68.  
  69.   /* Initialize far data pointers */
  70.     basemem = RetFARData();
  71.     if (basemem == 0)
  72.     {
  73.         printf("Can't Allocate enough Memory ... Bye\n");
  74.         exit(0);
  75.     }
  76.     Map_Seg += basemem;
  77.     Color_Seg += basemem;
  78.     Sky_Seg += basemem;
  79.       InternalScreen_Seg += basemem;
  80.  
  81.     while (kbhit())        /* clear keyboard buffer */
  82.         getch();
  83.  
  84.   /* Read the text mode palette & save */
  85.     ReadPalette(&BiosPal);
  86.     FadeOut(&BiosPal);
  87.  
  88.   /* Switch to graphics mode, read graphics palette (never used)
  89.    * and clear the palette to all black
  90.    */
  91.   printf("at 1\n");
  92.     SwitchToGraphics();
  93.     ReadPalette(&BiosPal);
  94.     ClearPAL();
  95.  
  96.   /* Initialize for MARS */
  97.     MakeMakeTable();
  98.     InitRandom();
  99.  
  100.   /* Make mars palette */
  101.     MakePalette(&MarsPal);
  102.     ClearPAL();
  103.  
  104.   /* Calculate the maps and set initial pos */
  105.     CalcSky();
  106.     CalcMountains();
  107.  
  108. if (argc > 1)
  109. {
  110.    if ((fh = open(argv[1], O_BINARY | O_RDONLY, S_IREAD)) != -1)
  111.    {
  112.     marsmap = MK_FP(Map_Seg, 0);
  113.     for (keys=0; keys < 64; keys++)
  114.     {
  115.        read(fh, marsmap, 1024);
  116.        marsmap += 1024;
  117.     }
  118.     close(fh);
  119. marsmap = MK_FP(Color_Seg, 0);
  120. for (keys=0; keys < 31488; keys++)
  121. {
  122.     *marsmap++ += 98;
  123. }
  124.    }
  125. }
  126.  
  127.  
  128.     Map_X = 1024;
  129.     Map_Y = 1024;
  130.     Map_X = 400;
  131.     Map_Y = 400;
  132.  
  133.   /* Update and draw the first view, then fade it in */
  134.     UpdateView();
  135.     DrawView();
  136.     FadeIn(&MarsPal);
  137.  
  138.     FlyHeight = 0;
  139.  
  140.   /* Update view pos & view & draw it until done */
  141.     while (1)
  142.     {
  143.         keys = getch();
  144.         switch (keys)
  145.         {
  146.                 case 'a':
  147.                     Angle = NormalizedAngle(Angle+15);
  148.                     break;
  149.                 case 's':
  150.                     Angle = NormalizedAngle(Angle-15);
  151.                     break;
  152.             case 'h':
  153.                     DeltaMove(32,NormalizedAngle(Angle + 180));
  154.                     break;
  155.  
  156.             case 'l': 
  157.                     DeltaMove(32,NormalizedAngle(Angle + 0));
  158.                      break;
  159.  
  160.             case 'j': 
  161.                     DeltaMove(32,NormalizedAngle(Angle+270));
  162.                     break;
  163.  
  164.             case 'k':
  165.                     DeltaMove(32,NormalizedAngle(Angle+90));
  166.                      break;
  167.  
  168.             case 'u': 
  169.              if (FlyHeight == 0)
  170.              {
  171.                 FlyHeight = MountHeight / 256;
  172.                 break;
  173.              }
  174.              FlyHeight += 20;
  175.              if (FlyHeight > 230)
  176.                 FlyHeight = 230;
  177.              break;
  178.  
  179.             case 'd': FlyHeight -= 20;
  180.              if (FlyHeight > 230)
  181.                 FlyHeight = MountHeight / 256;
  182.              break;
  183.  
  184.             case 'x':
  185.             case 'q':
  186.              FadeOut(&MarsPal);
  187.              SwitchToText();
  188.              ReleaseFarData(basemem);
  189.              exit(0);
  190.         }
  191.         UpdateView();
  192.         DrawView();
  193.     }
  194. }